# 1. 构建前端项目阶段 (Vue 3)
FROM node:23-alpine AS frontend
# 设置工作目录
WORKDIR /app
# 安装 pnpm（用于更快的依赖安装）
RUN npm install -g pnpm --registry=https://registry.npmmirror.com
# 将前端项目的依赖文件复制到容器内
COPY frontend/package.json .
COPY frontend/pnpm-lock.yaml .
# 安装依赖
RUN pnpm install --registry=https://registry.npmmirror.com
# 复制前端源代码
COPY frontend/ . 
# 构建前端项目
RUN pnpm run build

# 2. 构建后端项目阶段 (FastAPI + Python)
FROM python:3.10-alpine AS backend
# 设置工作目录
WORKDIR /app
# 安装必要的系统依赖（如编译工具、C 库等）
RUN apk add --no-cache gcc musl-dev libffi-dev
# 创建并激活虚拟环境
RUN python -m venv /venv
# 激活虚拟环境并安装依赖
RUN /venv/bin/pip install --upgrade pip
 # 复制依赖文件
COPY backend/requirements.txt .
RUN /venv/bin/pip install -r requirements.txt
# 复制后端项目源代码
COPY backend/ .

# 3. 构建最终镜像阶段
FROM python:3.10-alpine
# 设置工作目录
WORKDIR /app
# 安装必要的系统依赖（如时区等）
RUN apk update --no-cache && apk add --no-cache ca-certificates tzdata
# 安装 Nginx
RUN apk add --no-cache nginx
# 复制前端构建结果到最终镜像
COPY --from=frontend /app/dist /app/frontend
# 复制后端项目到最终镜像
COPY --from=backend /app /app
# 复制 Nginx 配置文件
COPY ./nginx.conf /etc/nginx/nginx.conf
# 将 Vue 构建输出复制到 nginx 的默认静态文件目录
COPY --from=frontend /app/dist /usr/share/nginx/html
# 复制虚拟环境中的依赖（site-packages）到最终镜像中
COPY --from=backend /venv /venv
# 设置环境变量，确保使用虚拟环境中的 Python 和依赖
ENV PATH="/venv/bin:$PATH"
# 设置环境变量
ENV TZ=Asia/Shanghai
# 暴露端口， Nginx 监听的端口
EXPOSE 80
# 启动 Nginx 和 Uvicorn
CMD ["sh", "-c", "nginx && uvicorn main:app --host 0.0.0.0 --port 8000"]
